Generated by Cython 3.0.2
Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.
Raw output: sr_radiality.c
+001: # cython: infer_types=True, wraparound=False, nonecheck=False, boundscheck=False, cdivision=True, language_level=3, profile=False, autogen_pxd=True
__pyx_t_7 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_7) < 0) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
002:
003: """
004: Python reimplementation of the Radiality Transform from the original SRRF paper
005: Paper: https://www.nature.com/articles/ncomms12471
006: Original code: https://github.com/HenriquesLab/NanoJ-SRRF/blob/master/SRRF/src/nanoj/srrf/java/SRRF.java
007: """
008:
009: from libc.math cimport sqrt, pi, fabs, cos, sin
010: from libc.stdlib cimport free
011:
+012: import numpy as np
__pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_7) < 0) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
013: cimport numpy as np
014:
015: from .interpolation_catmull_rom cimport _interpolate
+016: from ..utils.timeit import timeit2
__pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 16, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_n_s_timeit2); __Pyx_GIVEREF(__pyx_n_s_timeit2); if (__Pyx_PyList_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_timeit2)) __PYX_ERR(0, 16, __pyx_L1_error); __pyx_t_4 = __Pyx_Import(__pyx_n_s_utils_timeit, __pyx_t_7, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 16, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_timeit2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 16, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_timeit2, __pyx_t_7) < 0) __PYX_ERR(0, 16, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
017:
018: from cython.parallel import prange
019:
+020: cdef class Radiality:
struct __pyx_vtabstruct_7nanopyx_4core_9transform_12sr_radiality_Radiality {
void (*_calculate_radiality)(struct __pyx_obj_7nanopyx_4core_9transform_12sr_radiality_Radiality *, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, float, float);
float (*_calculateDk)(struct __pyx_obj_7nanopyx_4core_9transform_12sr_radiality_Radiality *, float, float, float, float, float, float, float);
};
static struct __pyx_vtabstruct_7nanopyx_4core_9transform_12sr_radiality_Radiality *__pyx_vtabptr_7nanopyx_4core_9transform_12sr_radiality_Radiality;
021: # autogen_pxd: cdef int magnification, symmetryAxis, border, nRingCoordinates
022: # autogen_pxd: cdef float ringRadius, psfWidth, gradRadius
023: # autogen_pxd: cdef bint doIntegrateLagTimes, radialityPositivityConstraint, doIntensityWeighting
024: # autogen_pxd: cdef float[12] xRingCoordinates, yRingCoordinates
025:
+026: def __init__(self, magnification: int = 5, ringRadius: float = 0.5, border: int = 0, radialityPositivityConstraint: bool = True, doIntensityWeighting: bool = True):
/* Python wrapper */ static int __pyx_pw_7nanopyx_4core_9transform_12sr_radiality_9Radiality_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ PyDoc_STRVAR(__pyx_doc_7nanopyx_4core_9transform_12sr_radiality_9Radiality___init__, "\n Calculate Radiality, as defined on the original version of SRRF - REF: https://www.nature.com/articles/ncomms12471\n :param magnification: Desired magnification for the generated radiality image\n :param ringRadius: Radius of the ring used to calculate the radiality\n :param border: Number of pixels to be zeroed on the borders of the radiality image\n :param radialityPositivityConstraint: If True, the radiality image will be constrained to be positive (values >= 0)\n :param doIntensityWeighting: If True, the radiality image will be weighted by the intensity of the original image\n "); #if CYTHON_UPDATE_DESCRIPTOR_DOC struct wrapperbase __pyx_wrapperbase_7nanopyx_4core_9transform_12sr_radiality_9Radiality___init__; #endif static int __pyx_pw_7nanopyx_4core_9transform_12sr_radiality_9Radiality_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_magnification = 0; double __pyx_v_ringRadius; PyObject *__pyx_v_border = 0; PyObject *__pyx_v_radialityPositivityConstraint = 0; PyObject *__pyx_v_doIntensityWeighting = 0; CYTHON_UNUSED Py_ssize_t __pyx_nargs; CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); #if CYTHON_ASSUME_SAFE_MACROS __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely((__pyx_nargs < 0))) __PYX_ERR(0, 26, __pyx_L3_error) #endif __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); { PyObject **__pyx_pyargnames[] = {&__pyx_n_s_magnification,&__pyx_n_s_ringRadius,&__pyx_n_s_border,&__pyx_n_s_radialityPositivityConstraint,&__pyx_n_s_doIntensityWeighting,0}; PyObject* values[5] = {0,0,0,0,0}; values[0] = __Pyx_Arg_NewRef_VARARGS(__pyx_k__11); values[2] = __Pyx_Arg_NewRef_VARARGS(__pyx_k__12); values[3] = __Pyx_Arg_NewRef_VARARGS(((PyObject *)Py_True)); values[4] = __Pyx_Arg_NewRef_VARARGS(((PyObject *)Py_True)); if (__pyx_kwds) { Py_ssize_t kw_args; switch (__pyx_nargs) { case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); switch (__pyx_nargs) { case 0: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_magnification); if (value) { values[0] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 26, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 1: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_ringRadius); if (value) { values[1] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 26, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_border); if (value) { values[2] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 26, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_radialityPositivityConstraint); if (value) { values[3] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 26, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_doIntensityWeighting); if (value) { values[4] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 26, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 26, __pyx_L3_error) } } else { switch (__pyx_nargs) { case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_magnification = ((PyObject*)values[0]); if (values[1]) { __pyx_v_ringRadius = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_ringRadius == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 26, __pyx_L3_error) } else { __pyx_v_ringRadius = ((double)0.5); } __pyx_v_border = ((PyObject*)values[2]); __pyx_v_radialityPositivityConstraint = values[3]; __pyx_v_doIntensityWeighting = values[4]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 5, __pyx_nargs); __PYX_ERR(0, 26, __pyx_L3_error) goto __pyx_L3_error; __pyx_L3_error:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); } } __Pyx_AddTraceback("nanopyx.core.transform.sr_radiality.Radiality.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_magnification), (&PyInt_Type), 0, "magnification", 1))) __PYX_ERR(0, 26, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_border), (&PyInt_Type), 0, "border", 1))) __PYX_ERR(0, 26, __pyx_L1_error) __pyx_r = __pyx_pf_7nanopyx_4core_9transform_12sr_radiality_9Radiality___init__(((struct __pyx_obj_7nanopyx_4core_9transform_12sr_radiality_Radiality *)__pyx_v_self), __pyx_v_magnification, __pyx_v_ringRadius, __pyx_v_border, __pyx_v_radialityPositivityConstraint, __pyx_v_doIntensityWeighting); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = -1; __pyx_L0:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); } } __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_pf_7nanopyx_4core_9transform_12sr_radiality_9Radiality___init__(struct __pyx_obj_7nanopyx_4core_9transform_12sr_radiality_Radiality *__pyx_v_self, PyObject *__pyx_v_magnification, double __pyx_v_ringRadius, PyObject *__pyx_v_border, PyObject *__pyx_v_radialityPositivityConstraint, PyObject *__pyx_v_doIntensityWeighting) { float __pyx_v_angleStep; int __pyx_v_angleIter; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__", 0); /* … */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("nanopyx.core.transform.sr_radiality.Radiality.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ if (!(likely(__Pyx_Py3Int_CheckExact(__pyx_int_5)) || __Pyx_RaiseUnexpectedTypeError("int", __pyx_int_5))) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_INCREF(__pyx_int_5); __pyx_k__11 = ((PyObject*)__pyx_int_5); __Pyx_GIVEREF(__pyx_int_5); if (!(likely(__Pyx_Py3Int_CheckExact(__pyx_int_0)) || __Pyx_RaiseUnexpectedTypeError("int", __pyx_int_0))) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_INCREF(__pyx_int_0); __pyx_k__12 = ((PyObject*)__pyx_int_0); __Pyx_GIVEREF(__pyx_int_0);
027: """
028: Calculate Radiality, as defined on the original version of SRRF - REF: https://www.nature.com/articles/ncomms12471
029: :param magnification: Desired magnification for the generated radiality image
030: :param ringRadius: Radius of the ring used to calculate the radiality
031: :param border: Number of pixels to be zeroed on the borders of the radiality image
032: :param radialityPositivityConstraint: If True, the radiality image will be constrained to be positive (values >= 0)
033: :param doIntensityWeighting: If True, the radiality image will be weighted by the intensity of the original image
034: """
+035: self.magnification = magnification
__pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_magnification); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 35, __pyx_L1_error) __pyx_v_self->magnification = __pyx_t_1;
+036: self.border = border
__pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_border); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 36, __pyx_L1_error) __pyx_v_self->border = __pyx_t_1;
+037: self.ringRadius = ringRadius * magnification
__pyx_t_2 = PyFloat_FromDouble(__pyx_v_ringRadius); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyNumber_Multiply(__pyx_t_2, __pyx_v_magnification); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 37, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 37, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_self->ringRadius = __pyx_t_4;
+038: self.border = border
__pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_border); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 38, __pyx_L1_error) __pyx_v_self->border = __pyx_t_1;
+039: self.radialityPositivityConstraint = radialityPositivityConstraint
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_radialityPositivityConstraint); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 39, __pyx_L1_error) __pyx_v_self->radialityPositivityConstraint = __pyx_t_5;
+040: self.doIntensityWeighting = doIntensityWeighting
__pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_doIntensityWeighting); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 40, __pyx_L1_error) __pyx_v_self->doIntensityWeighting = __pyx_t_5;
+041: self.nRingCoordinates = 12
__pyx_v_self->nRingCoordinates = 12;
042:
+043: cdef float angleStep = (pi * 2.) / self.nRingCoordinates
__pyx_v_angleStep = ((M_PI * 2.) / ((double)__pyx_v_self->nRingCoordinates));
+044: with nogil:
{
#ifdef WITH_THREAD
PyThreadState *_save;
_save = NULL;
Py_UNBLOCK_THREADS
__Pyx_FastGIL_Remember();
#endif
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
#ifdef WITH_THREAD
__Pyx_FastGIL_Forget();
Py_BLOCK_THREADS
#endif
goto __pyx_L5;
}
__pyx_L5:;
}
}
+045: for angleIter in range(self.nRingCoordinates):
__pyx_t_1 = __pyx_v_self->nRingCoordinates;
__pyx_t_6 = __pyx_t_1;
for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
__pyx_v_angleIter = __pyx_t_7;
+046: self.xRingCoordinates[angleIter] = cos(angleStep * angleIter) * self.ringRadius
(__pyx_v_self->xRingCoordinates[__pyx_v_angleIter]) = (cos((__pyx_v_angleStep * __pyx_v_angleIter)) * __pyx_v_self->ringRadius);
+047: self.yRingCoordinates[angleIter] = sin(angleStep * angleIter) * self.ringRadius
(__pyx_v_self->yRingCoordinates[__pyx_v_angleIter]) = (sin((__pyx_v_angleStep * __pyx_v_angleIter)) * __pyx_v_self->ringRadius);
}
}
048:
+049: def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7nanopyx_4core_9transform_12sr_radiality_9Radiality_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7nanopyx_4core_9transform_12sr_radiality_9Radiality_3__dealloc__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_pf_7nanopyx_4core_9transform_12sr_radiality_9Radiality_2__dealloc__(((struct __pyx_obj_7nanopyx_4core_9transform_12sr_radiality_Radiality *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
}
static void __pyx_pf_7nanopyx_4core_9transform_12sr_radiality_9Radiality_2__dealloc__(CYTHON_UNUSED struct __pyx_obj_7nanopyx_4core_9transform_12sr_radiality_Radiality *__pyx_v_self) {
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__dealloc__", 0);
/* function exit code */
__Pyx_RefNannyFinishContext();
}
050: # if self.xRingCoordinates is not NULL:
051: # free(self.xRingCoordinates)
052: # free(self.yRingCoordinates)
053: pass
054:
055: # @timeit2
+056: def calculate(self, image_stack: np.ndarray):
/* Python wrapper */ static PyObject *__pyx_pw_7nanopyx_4core_9transform_12sr_radiality_9Radiality_5calculate(PyObject *__pyx_v_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_7nanopyx_4core_9transform_12sr_radiality_9Radiality_4calculate, "\n Calculate Radiality, as defined on the original version of SRRF - REF: https://www.nature.com/articles/ncomms12471\n :param image_stack: Image stack to be processed\n :return: Radiality image-stack, magnified image-stack, x-gradient image, y-gradient image\n "); static PyMethodDef __pyx_mdef_7nanopyx_4core_9transform_12sr_radiality_9Radiality_5calculate = {"calculate", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7nanopyx_4core_9transform_12sr_radiality_9Radiality_5calculate, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7nanopyx_4core_9transform_12sr_radiality_9Radiality_4calculate}; static PyObject *__pyx_pw_7nanopyx_4core_9transform_12sr_radiality_9Radiality_5calculate(PyObject *__pyx_v_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyArrayObject *__pyx_v_image_stack = 0; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("calculate (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_MACROS __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely((__pyx_nargs < 0))) __PYX_ERR(0, 56, __pyx_L3_error) #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject **__pyx_pyargnames[] = {&__pyx_n_s_image_stack,0}; PyObject* values[1] = {0}; if (__pyx_kwds) { Py_ssize_t kw_args; switch (__pyx_nargs) { case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); switch (__pyx_nargs) { case 0: if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_image_stack)) != 0)) { (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 56, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "calculate") < 0)) __PYX_ERR(0, 56, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); } __pyx_v_image_stack = ((PyArrayObject *)values[0]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("calculate", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 56, __pyx_L3_error) goto __pyx_L3_error; __pyx_L3_error:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } } __Pyx_AddTraceback("nanopyx.core.transform.sr_radiality.Radiality.calculate", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_image_stack), __pyx_ptype_5numpy_ndarray, 0, "image_stack", 0))) __PYX_ERR(0, 56, __pyx_L1_error) __pyx_r = __pyx_pf_7nanopyx_4core_9transform_12sr_radiality_9Radiality_4calculate(((struct __pyx_obj_7nanopyx_4core_9transform_12sr_radiality_Radiality *)__pyx_v_self), __pyx_v_image_stack); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_7nanopyx_4core_9transform_12sr_radiality_9Radiality_4calculate(struct __pyx_obj_7nanopyx_4core_9transform_12sr_radiality_Radiality *__pyx_v_self, PyArrayObject *__pyx_v_image_stack) { CYTHON_UNUSED int __pyx_v_nFrames; PyObject *__pyx_v_imRaw = NULL; PyObject *__pyx_v_imGx = NULL; PyObject *__pyx_v_imGy = NULL; PyObject *__pyx_v_imRad = NULL; PyObject *__pyx_v_imIW = NULL; int __pyx_v_n; __Pyx_memviewslice __pyx_v__imRaw = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v__imGx = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v__imGy = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v__imRad = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v__imIW = { 0, 0, { 0 }, { 0 }, { 0 } }; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("calculate", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_12, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_13, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_14, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_15, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_t_16, 1); __Pyx_AddTraceback("nanopyx.core.transform.sr_radiality.Radiality.calculate", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_imRaw); __Pyx_XDECREF(__pyx_v_imGx); __Pyx_XDECREF(__pyx_v_imGy); __Pyx_XDECREF(__pyx_v_imRad); __Pyx_XDECREF(__pyx_v_imIW); __PYX_XCLEAR_MEMVIEW(&__pyx_v__imRaw, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v__imGx, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v__imGy, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v__imRad, 1); __PYX_XCLEAR_MEMVIEW(&__pyx_v__imIW, 1); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__25 = PyTuple_Pack(14, __pyx_n_s_self, __pyx_n_s_image_stack, __pyx_n_s_nFrames, __pyx_n_s_imRaw, __pyx_n_s_imGx, __pyx_n_s_imGy, __pyx_n_s_imRad, __pyx_n_s_imIW, __pyx_n_s_n, __pyx_n_s_imRaw_2, __pyx_n_s_imGx_2, __pyx_n_s_imGy_2, __pyx_n_s_imRad_2, __pyx_n_s_imIW_2); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 56, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__25); __Pyx_GIVEREF(__pyx_tuple__25); /* … */ __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 56, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_image_stack, __pyx_kp_s_np_ndarray) < 0) __PYX_ERR(0, 56, __pyx_L1_error) __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_7nanopyx_4core_9transform_12sr_radiality_9Radiality_5calculate, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Radiality_calculate, NULL, __pyx_n_s_nanopyx_core_transform_sr_radial, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 56, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_4); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_7nanopyx_4core_9transform_12sr_radiality_Radiality, __pyx_n_s_calculate, __pyx_t_7) < 0) __PYX_ERR(0, 56, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; PyType_Modified(__pyx_ptype_7nanopyx_4core_9transform_12sr_radiality_Radiality); __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_nanopyx_core_transform_sr_ra, __pyx_n_s_calculate, 56, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 56, __pyx_L1_error)
057: """
058: Calculate Radiality, as defined on the original version of SRRF - REF: https://www.nature.com/articles/ncomms12471
059: :param image_stack: Image stack to be processed
060: :return: Radiality image-stack, magnified image-stack, x-gradient image, y-gradient image
061: """
+062: assert image_stack.ndim == 3
#ifndef CYTHON_WITHOUT_ASSERTIONS
if (unlikely(__pyx_assertions_enabled())) {
__pyx_t_1 = __pyx_f_5numpy_7ndarray_4ndim_ndim(__pyx_v_image_stack); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 62, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 == 3);
if (unlikely(!__pyx_t_2)) {
__Pyx_Raise(__pyx_builtin_AssertionError, 0, 0, 0);
__PYX_ERR(0, 62, __pyx_L1_error)
}
}
#else
if ((1)); else __PYX_ERR(0, 62, __pyx_L1_error)
#endif
063:
+064: cdef int nFrames = image_stack.shape[0]
__pyx_t_3 = __pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_image_stack); if (unlikely(__pyx_t_3 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 64, __pyx_L1_error) __pyx_v_nFrames = (__pyx_t_3[0]);
065:
+066: imRaw = image_stack.astype(np.float32)
__pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_image_stack), __pyx_n_s_astype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = NULL; __pyx_t_1 = 0; #if CYTHON_UNPACK_METHODS if (likely(PyMethod_Check(__pyx_t_5))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); if (likely(__pyx_t_6)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_5, function); __pyx_t_1 = 1; } } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_1, 1+__pyx_t_1); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } __pyx_v_imRaw = __pyx_t_4; __pyx_t_4 = 0;
+067: imGx = np.zeros_like(imRaw)
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 67, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 67, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = NULL; __pyx_t_1 = 0; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); if (likely(__pyx_t_5)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_7, function); __pyx_t_1 = 1; } } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_imRaw}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_1, 1+__pyx_t_1); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 67, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __pyx_v_imGx = __pyx_t_4; __pyx_t_4 = 0;
+068: imGy = np.zeros_like(imRaw)
__Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 68, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_zeros_like); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 68, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = NULL; __pyx_t_1 = 0; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); if (likely(__pyx_t_7)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_5, function); __pyx_t_1 = 1; } } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_imRaw}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_1, 1+__pyx_t_1); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 68, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } __pyx_v_imGy = __pyx_t_4; __pyx_t_4 = 0;
+069: imRad = np.zeros((image_stack.shape[0], image_stack.shape[1]*self.magnification, image_stack.shape[2]*self.magnification), dtype=np.float32)
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_3 = __pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_image_stack); if (unlikely(__pyx_t_3 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 69, __pyx_L1_error) __pyx_t_4 = PyInt_FromSsize_t((__pyx_t_3[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_image_stack); if (unlikely(__pyx_t_3 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 69, __pyx_L1_error) __pyx_t_7 = PyInt_FromSsize_t(((__pyx_t_3[1]) * __pyx_v_self->magnification)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_3 = __pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_image_stack); if (unlikely(__pyx_t_3 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 69, __pyx_L1_error) __pyx_t_6 = PyInt_FromSsize_t(((__pyx_t_3[2]) * __pyx_v_self->magnification)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4)) __PYX_ERR(0, 69, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_7); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_7)) __PYX_ERR(0, 69, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_6); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_6)) __PYX_ERR(0, 69, __pyx_L1_error); __pyx_t_4 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_8); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8)) __PYX_ERR(0, 69, __pyx_L1_error); __pyx_t_8 = 0; __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_v_imRad = __pyx_t_4; __pyx_t_4 = 0;
+070: imIW = np.zeros((image_stack.shape[0], image_stack.shape[1]*self.magnification, image_stack.shape[2]*self.magnification), dtype=np.float32)
__Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_3 = __pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_image_stack); if (unlikely(__pyx_t_3 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 70, __pyx_L1_error) __pyx_t_4 = PyInt_FromSsize_t((__pyx_t_3[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_image_stack); if (unlikely(__pyx_t_3 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 70, __pyx_L1_error) __pyx_t_6 = PyInt_FromSsize_t(((__pyx_t_3[1]) * __pyx_v_self->magnification)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = __pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_image_stack); if (unlikely(__pyx_t_3 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 70, __pyx_L1_error) __pyx_t_5 = PyInt_FromSsize_t(((__pyx_t_3[2]) * __pyx_v_self->magnification)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4)) __PYX_ERR(0, 70, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_6); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6)) __PYX_ERR(0, 70, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_5); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_5)) __PYX_ERR(0, 70, __pyx_L1_error); __pyx_t_4 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_7); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7)) __PYX_ERR(0, 70, __pyx_L1_error); __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_v_imIW = __pyx_t_4; __pyx_t_4 = 0;
071:
072: cdef int n
+073: cdef float[:,:,:] _imRaw = imRaw
__pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(__pyx_v_imRaw, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 73, __pyx_L1_error) __pyx_v__imRaw = __pyx_t_9; __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
+074: cdef float[:,:,:] _imGx = imGx
__pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(__pyx_v_imGx, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 74, __pyx_L1_error) __pyx_v__imGx = __pyx_t_9; __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
+075: cdef float[:,:,:] _imGy = imGy
__pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(__pyx_v_imGy, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 75, __pyx_L1_error) __pyx_v__imGy = __pyx_t_9; __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
+076: cdef float[:,:,:] _imRad = imRad
__pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(__pyx_v_imRad, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 76, __pyx_L1_error) __pyx_v__imRad = __pyx_t_9; __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
+077: cdef float[:,:,:] _imIW = imIW
__pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(__pyx_v_imIW, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 77, __pyx_L1_error) __pyx_v__imIW = __pyx_t_9; __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;
078:
+079: with nogil:
{
#ifdef WITH_THREAD
PyThreadState *_save;
_save = NULL;
Py_UNBLOCK_THREADS
__Pyx_FastGIL_Remember();
#endif
/*try:*/ {
/* … */
/*finally:*/ {
/*normal exit:*/{
#ifdef WITH_THREAD
__Pyx_FastGIL_Forget();
Py_BLOCK_THREADS
#endif
goto __pyx_L5;
}
__pyx_L4_error: {
#ifdef WITH_THREAD
__Pyx_FastGIL_Forget();
Py_BLOCK_THREADS
#endif
goto __pyx_L1_error;
}
__pyx_L5:;
}
}
+080: for n in prange(nFrames): #, schedule='static', chunksize=1):
__pyx_t_1 = __pyx_v_nFrames;
{
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) (x)
#define unlikely(x) (x)
#endif
__pyx_t_11 = (__pyx_t_1 - 0 + 1 - 1/abs(1)) / 1;
if (__pyx_t_11 > 0)
{
#ifdef _OPENMP
#pragma omp parallel
#endif /* _OPENMP */
{
#ifdef _OPENMP
#pragma omp for firstprivate(__pyx_v_n) lastprivate(__pyx_v_n)
#endif /* _OPENMP */
for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_11; __pyx_t_10++){
{
__pyx_v_n = (int)(0 + 1 * __pyx_t_10);
+081: self._calculate_radiality(_imRaw[n,:,:], _imRad[n,:,:], _imIW[n,:,:], _imGx[n,:,:], _imGy[n,:,:], 0, 0)
__pyx_t_12.data = __pyx_v__imRaw.data;
__pyx_t_12.memview = __pyx_v__imRaw.memview;
__PYX_INC_MEMVIEW(&__pyx_t_12, 0);
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_n;
Py_ssize_t __pyx_tmp_stride = __pyx_v__imRaw.strides[0];
__pyx_t_12.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_12.shape[0] = __pyx_v__imRaw.shape[1];
__pyx_t_12.strides[0] = __pyx_v__imRaw.strides[1];
__pyx_t_12.suboffsets[0] = -1;
__pyx_t_12.shape[1] = __pyx_v__imRaw.shape[2];
__pyx_t_12.strides[1] = __pyx_v__imRaw.strides[2];
__pyx_t_12.suboffsets[1] = -1;
__pyx_t_13.data = __pyx_v__imRad.data;
__pyx_t_13.memview = __pyx_v__imRad.memview;
__PYX_INC_MEMVIEW(&__pyx_t_13, 0);
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_n;
Py_ssize_t __pyx_tmp_stride = __pyx_v__imRad.strides[0];
__pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_13.shape[0] = __pyx_v__imRad.shape[1];
__pyx_t_13.strides[0] = __pyx_v__imRad.strides[1];
__pyx_t_13.suboffsets[0] = -1;
__pyx_t_13.shape[1] = __pyx_v__imRad.shape[2];
__pyx_t_13.strides[1] = __pyx_v__imRad.strides[2];
__pyx_t_13.suboffsets[1] = -1;
__pyx_t_14.data = __pyx_v__imIW.data;
__pyx_t_14.memview = __pyx_v__imIW.memview;
__PYX_INC_MEMVIEW(&__pyx_t_14, 0);
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_n;
Py_ssize_t __pyx_tmp_stride = __pyx_v__imIW.strides[0];
__pyx_t_14.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_14.shape[0] = __pyx_v__imIW.shape[1];
__pyx_t_14.strides[0] = __pyx_v__imIW.strides[1];
__pyx_t_14.suboffsets[0] = -1;
__pyx_t_14.shape[1] = __pyx_v__imIW.shape[2];
__pyx_t_14.strides[1] = __pyx_v__imIW.strides[2];
__pyx_t_14.suboffsets[1] = -1;
__pyx_t_15.data = __pyx_v__imGx.data;
__pyx_t_15.memview = __pyx_v__imGx.memview;
__PYX_INC_MEMVIEW(&__pyx_t_15, 0);
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_n;
Py_ssize_t __pyx_tmp_stride = __pyx_v__imGx.strides[0];
__pyx_t_15.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_15.shape[0] = __pyx_v__imGx.shape[1];
__pyx_t_15.strides[0] = __pyx_v__imGx.strides[1];
__pyx_t_15.suboffsets[0] = -1;
__pyx_t_15.shape[1] = __pyx_v__imGx.shape[2];
__pyx_t_15.strides[1] = __pyx_v__imGx.strides[2];
__pyx_t_15.suboffsets[1] = -1;
__pyx_t_16.data = __pyx_v__imGy.data;
__pyx_t_16.memview = __pyx_v__imGy.memview;
__PYX_INC_MEMVIEW(&__pyx_t_16, 0);
{
Py_ssize_t __pyx_tmp_idx = __pyx_v_n;
Py_ssize_t __pyx_tmp_stride = __pyx_v__imGy.strides[0];
__pyx_t_16.data += __pyx_tmp_idx * __pyx_tmp_stride;
}
__pyx_t_16.shape[0] = __pyx_v__imGy.shape[1];
__pyx_t_16.strides[0] = __pyx_v__imGy.strides[1];
__pyx_t_16.suboffsets[0] = -1;
__pyx_t_16.shape[1] = __pyx_v__imGy.shape[2];
__pyx_t_16.strides[1] = __pyx_v__imGy.strides[2];
__pyx_t_16.suboffsets[1] = -1;
((struct __pyx_vtabstruct_7nanopyx_4core_9transform_12sr_radiality_Radiality *)__pyx_v_self->__pyx_vtab)->_calculate_radiality(__pyx_v_self, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, 0.0, 0.0); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 81, __pyx_L8_error)
__PYX_XCLEAR_MEMVIEW(&__pyx_t_12, 0);
__pyx_t_12.memview = NULL; __pyx_t_12.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_13, 0);
__pyx_t_13.memview = NULL; __pyx_t_13.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_14, 0);
__pyx_t_14.memview = NULL; __pyx_t_14.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_15, 0);
__pyx_t_15.memview = NULL; __pyx_t_15.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_16, 0);
__pyx_t_16.memview = NULL; __pyx_t_16.data = NULL;
goto __pyx_L11;
__pyx_L8_error:;
{
#ifdef WITH_THREAD
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
#endif
#ifdef _OPENMP
#pragma omp flush(__pyx_parallel_exc_type)
#endif /* _OPENMP */
if (!__pyx_parallel_exc_type) {
__Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
__pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
__Pyx_GOTREF(__pyx_parallel_exc_type);
}
#ifdef WITH_THREAD
__Pyx_PyGILState_Release(__pyx_gilstate_save);
#endif
}
__pyx_parallel_why = 4;
goto __pyx_L10;
__pyx_L10:;
#ifdef _OPENMP
#pragma omp critical(__pyx_parallel_lastprivates15)
#endif /* _OPENMP */
{
__pyx_parallel_temp0 = __pyx_v_n;
}
__pyx_L11:;
#ifdef _OPENMP
#pragma omp flush(__pyx_parallel_why)
#endif /* _OPENMP */
}
}
#ifdef _OPENMP
Py_END_ALLOW_THREADS
#else
{
#ifdef WITH_THREAD
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
#endif
#endif /* _OPENMP */
/* Clean up any temporaries */
__PYX_XCLEAR_MEMVIEW(&__pyx_t_12, 0);
__pyx_t_12.memview = NULL; __pyx_t_12.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_13, 0);
__pyx_t_13.memview = NULL; __pyx_t_13.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_14, 0);
__pyx_t_14.memview = NULL; __pyx_t_14.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_15, 0);
__pyx_t_15.memview = NULL; __pyx_t_15.data = NULL;
__PYX_XCLEAR_MEMVIEW(&__pyx_t_16, 0);
__pyx_t_16.memview = NULL; __pyx_t_16.data = NULL;
#ifdef WITH_THREAD
__Pyx_PyGILState_Release(__pyx_gilstate_save);
#endif
#ifndef _OPENMP
}
#endif /* _OPENMP */
}
}
if (__pyx_parallel_exc_type) {
/* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
__pyx_parallel_why = 4;
}
if (__pyx_parallel_why) {
__pyx_v_n = __pyx_parallel_temp0;
switch (__pyx_parallel_why) {
case 4:
{
#ifdef WITH_THREAD
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
#endif
__Pyx_GIVEREF(__pyx_parallel_exc_type);
__Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
__pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
#ifdef WITH_THREAD
__Pyx_PyGILState_Release(__pyx_gilstate_save);
#endif
}
goto __pyx_L4_error;
}
}
}
#if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
#undef likely
#undef unlikely
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#endif
}
082:
+083: return imRad, imIW, imGx, imGy
__Pyx_XDECREF(__pyx_r); __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 83, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_imRad); __Pyx_GIVEREF(__pyx_v_imRad); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_imRad)) __PYX_ERR(0, 83, __pyx_L1_error); __Pyx_INCREF(__pyx_v_imIW); __Pyx_GIVEREF(__pyx_v_imIW); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_imIW)) __PYX_ERR(0, 83, __pyx_L1_error); __Pyx_INCREF(__pyx_v_imGx); __Pyx_GIVEREF(__pyx_v_imGx); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_imGx)) __PYX_ERR(0, 83, __pyx_L1_error); __Pyx_INCREF(__pyx_v_imGy); __Pyx_GIVEREF(__pyx_v_imGy); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_imGy)) __PYX_ERR(0, 83, __pyx_L1_error); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0;
084:
+085: cdef void _calculate_radiality(self, float[:,:] imRaw, float[:,:] imRad, float[:,:] imIW, float[:,:] imGx, float[:,:] imGy, float shiftX, float shiftY) nogil:
static void __pyx_f_7nanopyx_4core_9transform_12sr_radiality_9Radiality__calculate_radiality(struct __pyx_obj_7nanopyx_4core_9transform_12sr_radiality_Radiality *__pyx_v_self, __Pyx_memviewslice __pyx_v_imRaw, __Pyx_memviewslice __pyx_v_imRad, __Pyx_memviewslice __pyx_v_imIW, __Pyx_memviewslice __pyx_v_imGx, __Pyx_memviewslice __pyx_v_imGy, float __pyx_v_shiftX, float __pyx_v_shiftY) {
int __pyx_v_w;
int __pyx_v_h;
int __pyx_v_i;
int __pyx_v_j;
int __pyx_v_sampleIter;
float __pyx_v_x0;
float __pyx_v_y0;
float __pyx_v_xc;
float __pyx_v_yc;
float __pyx_v_GMag;
float __pyx_v_xRing;
float __pyx_v_yRing;
float __pyx_v_vGx;
float __pyx_v_vGy;
float __pyx_v_CGH;
float __pyx_v_Dk;
float __pyx_v_DivDFactor;
#ifdef WITH_THREAD
PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
#endif
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_calculate_radiality", 0);
#ifdef WITH_THREAD
__Pyx_PyGILState_Release(__pyx_gilstate_save);
#endif
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
#ifdef WITH_THREAD
__pyx_gilstate_save = __Pyx_PyGILState_Ensure();
#endif
__Pyx_AddTraceback("nanopyx.core.transform.sr_radiality.Radiality._calculate_radiality", __pyx_clineno, __pyx_lineno, __pyx_filename);
#ifdef WITH_THREAD
__Pyx_PyGILState_Release(__pyx_gilstate_save);
#endif
__pyx_L0:;
__Pyx_RefNannyFinishContextNogil()
}
086: """
087: Note that Gx and Gy are initialized but zeroed
088: """
089:
+090: cdef int w = imRaw.shape[1]
__pyx_v_w = (__pyx_v_imRaw.shape[1]);
+091: cdef int h = imRaw.shape[0]
__pyx_v_h = (__pyx_v_imRaw.shape[0]);
092: cdef int i, j, sampleIter
093: cdef float x0, y0, xc, yc, GMag, xRing, yRing
094:
095: # calculate Gx and Gy
096: cdef float vGx, vGy
097: cdef float CGH # for Culley Gustafsson Henriques transform
098:
099: # Radiality Variable
+100: cdef float Dk, DivDFactor = 0
__pyx_v_DivDFactor = 0.0;
101:
102: # for j in range(1, h-1):
103: # for i in range(1, w-1):
104: # imGx[j,i] = -imRaw[j,i-1]+imRaw[j,i+1]
105: # imGy[j,i] = -imRaw[j-1,i]+imRaw[j+1,i]
+106: _c_gradient_radiality(&imRaw[0,0], &imGx[0,0], &imGy[0,0], imRaw.shape[0], imRaw.shape[1])
__pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0; _c_gradient_radiality((&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imRaw.data + __pyx_t_1 * __pyx_v_imRaw.strides[0]) ) + __pyx_t_2 * __pyx_v_imRaw.strides[1]) )))), (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imGx.data + __pyx_t_3 * __pyx_v_imGx.strides[0]) ) + __pyx_t_4 * __pyx_v_imGx.strides[1]) )))), (&(*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imGy.data + __pyx_t_5 * __pyx_v_imGy.strides[0]) ) + __pyx_t_6 * __pyx_v_imGy.strides[1]) )))), (__pyx_v_imRaw.shape[0]), (__pyx_v_imRaw.shape[1]));
107:
+108: for j in range((1 + self.border) * self.magnification, (h - 1 - self.border) * self.magnification):
__pyx_t_7 = (((__pyx_v_h - 1) - __pyx_v_self->border) * __pyx_v_self->magnification);
__pyx_t_8 = __pyx_t_7;
for (__pyx_t_9 = ((1 + __pyx_v_self->border) * __pyx_v_self->magnification); __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
__pyx_v_j = __pyx_t_9;
+109: for i in range((1 + self.border) * self.magnification, (w - 1 - self.border) * self.magnification):
__pyx_t_10 = (((__pyx_v_w - 1) - __pyx_v_self->border) * __pyx_v_self->magnification);
__pyx_t_11 = __pyx_t_10;
for (__pyx_t_12 = ((1 + __pyx_v_self->border) * __pyx_v_self->magnification); __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
__pyx_v_i = __pyx_t_12;
+110: xc = i + 0.5 + shiftX * self.magnification
__pyx_v_xc = ((__pyx_v_i + 0.5) + (__pyx_v_shiftX * __pyx_v_self->magnification));
+111: yc = j + 0.5 + shiftY * self.magnification
__pyx_v_yc = ((__pyx_v_j + 0.5) + (__pyx_v_shiftY * __pyx_v_self->magnification));
112:
+113: imIW[j,i] = _interpolate(imRaw, xc / self.magnification, yc / self.magnification)
__pyx_t_13 = __pyx_f_7nanopyx_4core_9transform_25interpolation_catmull_rom__interpolate(__pyx_v_imRaw, (__pyx_v_xc / ((float)__pyx_v_self->magnification)), (__pyx_v_yc / ((float)__pyx_v_self->magnification))); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 113, __pyx_L1_error)
__pyx_t_6 = __pyx_v_j;
__pyx_t_5 = __pyx_v_i;
*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imIW.data + __pyx_t_6 * __pyx_v_imIW.strides[0]) ) + __pyx_t_5 * __pyx_v_imIW.strides[1]) )) = __pyx_t_13;
114:
115: # Output
+116: CGH = 0
__pyx_v_CGH = 0.0;
+117: for sampleIter in range(0, self.nRingCoordinates):
__pyx_t_14 = __pyx_v_self->nRingCoordinates;
__pyx_t_15 = __pyx_t_14;
for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
__pyx_v_sampleIter = __pyx_t_16;
+118: xRing = self.xRingCoordinates[sampleIter]
__pyx_v_xRing = (__pyx_v_self->xRingCoordinates[__pyx_v_sampleIter]);
+119: yRing = self.yRingCoordinates[sampleIter]
__pyx_v_yRing = (__pyx_v_self->yRingCoordinates[__pyx_v_sampleIter]);
120:
+121: x0 = xc + xRing
__pyx_v_x0 = (__pyx_v_xc + __pyx_v_xRing);
+122: y0 = yc + yRing
__pyx_v_y0 = (__pyx_v_yc + __pyx_v_yRing);
123:
+124: vGx = _interpolate(imGx, x0 / self.magnification, y0 / self.magnification)
__pyx_t_13 = __pyx_f_7nanopyx_4core_9transform_25interpolation_catmull_rom__interpolate(__pyx_v_imGx, (__pyx_v_x0 / ((float)__pyx_v_self->magnification)), (__pyx_v_y0 / ((float)__pyx_v_self->magnification))); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 124, __pyx_L1_error)
__pyx_v_vGx = __pyx_t_13;
+125: vGy = _interpolate(imGy, x0 / self.magnification, y0 / self.magnification)
__pyx_t_13 = __pyx_f_7nanopyx_4core_9transform_25interpolation_catmull_rom__interpolate(__pyx_v_imGy, (__pyx_v_x0 / ((float)__pyx_v_self->magnification)), (__pyx_v_y0 / ((float)__pyx_v_self->magnification))); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 125, __pyx_L1_error)
__pyx_v_vGy = __pyx_t_13;
+126: GMag = sqrt(vGx * vGx + vGy * vGy)
__pyx_v_GMag = sqrt(((__pyx_v_vGx * __pyx_v_vGx) + (__pyx_v_vGy * __pyx_v_vGy)));
127:
+128: Dk = 1 - self._calculateDk(x0, y0, xc, yc, vGx, vGy, GMag) / self.ringRadius
__pyx_t_13 = ((struct __pyx_vtabstruct_7nanopyx_4core_9transform_12sr_radiality_Radiality *)__pyx_v_self->__pyx_vtab)->_calculateDk(__pyx_v_self, __pyx_v_x0, __pyx_v_y0, __pyx_v_xc, __pyx_v_yc, __pyx_v_vGx, __pyx_v_vGy, __pyx_v_GMag); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 128, __pyx_L1_error)
__pyx_v_Dk = (1.0 - (__pyx_t_13 / __pyx_v_self->ringRadius));
+129: Dk = Dk * Dk
__pyx_v_Dk = (__pyx_v_Dk * __pyx_v_Dk);
130:
+131: if (vGx * xRing + vGy * yRing) > 0: # inwards or outwards vector
__pyx_t_17 = (((__pyx_v_vGx * __pyx_v_xRing) + (__pyx_v_vGy * __pyx_v_yRing)) > 0.0);
if (__pyx_t_17) {
/* … */
goto __pyx_L9;
}
+132: DivDFactor -= Dk
__pyx_v_DivDFactor = (__pyx_v_DivDFactor - __pyx_v_Dk);
133: else:
+134: DivDFactor += Dk
/*else*/ {
__pyx_v_DivDFactor = (__pyx_v_DivDFactor + __pyx_v_Dk);
}
__pyx_L9:;
}
135:
+136: DivDFactor /= self.nRingCoordinates
__pyx_v_DivDFactor = (__pyx_v_DivDFactor / __pyx_v_self->nRingCoordinates);
137:
+138: if self.radialityPositivityConstraint:
if (__pyx_v_self->radialityPositivityConstraint) {
/* … */
goto __pyx_L10;
}
+139: CGH = max(DivDFactor, 0)
__pyx_t_18 = 0;
__pyx_t_13 = __pyx_v_DivDFactor;
__pyx_t_17 = (__pyx_t_18 > __pyx_t_13);
if (__pyx_t_17) {
__pyx_t_19 = __pyx_t_18;
} else {
__pyx_t_19 = __pyx_t_13;
}
__pyx_v_CGH = __pyx_t_19;
140: else:
+141: CGH = DivDFactor
/*else*/ {
__pyx_v_CGH = __pyx_v_DivDFactor;
}
__pyx_L10:;
142:
+143: if self.doIntensityWeighting:
if (__pyx_v_self->doIntensityWeighting) {
/* … */
goto __pyx_L11;
}
+144: imRad[j,i] = CGH * imIW[j,i]
__pyx_t_5 = __pyx_v_j;
__pyx_t_6 = __pyx_v_i;
__pyx_t_4 = __pyx_v_j;
__pyx_t_3 = __pyx_v_i;
*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imRad.data + __pyx_t_4 * __pyx_v_imRad.strides[0]) ) + __pyx_t_3 * __pyx_v_imRad.strides[1]) )) = (__pyx_v_CGH * (*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imIW.data + __pyx_t_5 * __pyx_v_imIW.strides[0]) ) + __pyx_t_6 * __pyx_v_imIW.strides[1]) ))));
145:
146: else:
+147: imRad[j,i] = CGH
/*else*/ {
__pyx_t_6 = __pyx_v_j;
__pyx_t_5 = __pyx_v_i;
*((float *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_imRad.data + __pyx_t_6 * __pyx_v_imRad.strides[0]) ) + __pyx_t_5 * __pyx_v_imRad.strides[1]) )) = __pyx_v_CGH;
}
__pyx_L11:;
}
}
148:
149:
+150: cdef float _calculateDk(self, float x, float y, float xc, float yc, float vGx, float vGy, float vGx2Gy2) nogil:
static float __pyx_f_7nanopyx_4core_9transform_12sr_radiality_9Radiality__calculateDk(struct __pyx_obj_7nanopyx_4core_9transform_12sr_radiality_Radiality *__pyx_v_self, float __pyx_v_x, float __pyx_v_y, float __pyx_v_xc, float __pyx_v_yc, float __pyx_v_vGx, float __pyx_v_vGy, float __pyx_v_vGx2Gy2) {
float __pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+151: if vGx2Gy2 == 0:
__pyx_t_1 = (__pyx_v_vGx2Gy2 == 0.0);
if (__pyx_t_1) {
/* … */
}
+152: return self.ringRadius
__pyx_r = __pyx_v_self->ringRadius;
goto __pyx_L0;
153: else:
+154: return fabs(vGy * (xc - x) - vGx * (yc - y)) / vGx2Gy2
/*else*/ {
__pyx_r = (fabs(((__pyx_v_vGy * (__pyx_v_xc - __pyx_v_x)) - (__pyx_v_vGx * (__pyx_v_yc - __pyx_v_y)))) / ((double)__pyx_v_vGx2Gy2));
goto __pyx_L0;
}